import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)


# servo_pin 舵机信号线接树莓派GPIO17
def complex_change(servo_pin):
	GPIO.setup(servo_pin, GPIO.OUT, initial = False)
	p = GPIO.PWM(servo_pin, 50)  # 初始频率为50HZ
	p.start(angleToDutyCycle(90))  # 舵机初始化角度为90，p.start(5.833)
	sleep(0.5)

	p.ChangeDutyCycle(0)  # 清空当前占空比，使舵机停止抖动

	return p


# 水平旋转角度转换到PWM占空比
def angleToDutyCycle(angle):
	# 注意，这里舵机的范围 是0到270度，如果舵机的范围是0到180，则需要将270更换为180
	return 2.5 + (angle / 270.0 )* 10

# 垂直旋转角度转换到PWM占空比
# 190度 回正
# 90度 下落
def angleToDutyCycleVertical(angle):
	return (angle / 270.0 )* 10

if __name__ == '__main__':
	
	while True:
		angle = int(input('水平旋转度数：'))
		# 17 水平转动
		p = complex_change(17)
		p.ChangeDutyCycle(angleToDutyCycle(angle))

		sleep(1.5)

		# 18 垂直方向回正
		p = complex_change(18)
		# 90度 下落
		p.ChangeDutyCycle(angleToDutyCycleVertical(90))
		sleep(0.5)
		# 190度 回正
		p.ChangeDutyCycle(angleToDutyCycleVertical(190))


		sleep(0.1)
		p.ChangeDutyCycle(0)  # 清空当前占空比，使舵机停止抖动